import CryptoJS from "crypto-js";
import Cookies from "js-cookie";

export interface AuthResponse {
  token: string;
  expiresIn?: number; // 过期时间（秒）
}
/**
 * 模拟模拟token，其中包含用户名称、登陆密码以及token失效时间
 * @param phoneNumber 手机号
 * @param dentify 验证码
 * @param expirationMinutes 失效时间
 */
export function generateToken(
  phoneNumber: string,
  dentify: string,
  expirationMinutes: number
) {
  // 生成随机字符串作为 Token 的一部分
  const randomString = CryptoJS.lib.WordArray.random(16).toString();
  // 获取当前时间戳
  const currentTime = Date.now();

  // 计算失效时间戳
  const expirationTime = currentTime + expirationMinutes * 60 * 1000;

  // 将手机号、验证码、随机字符串、失效时间拼接成一个字符串
  const tokenString = `${phoneNumber}:${dentify}:${randomString}:${expirationTime}`;

  // 使用 SHA-256 哈希算法生成 Token
  const token = CryptoJS.SHA256(tokenString).toString();

  return {
    token: token,
    expirationTime: expirationTime,
  };
}

// 设置带过期时间的 cookie
export const setCookieWithExpiry = (
  key: string,
  value: string,
  expiresIn?: number
): void => {
  const options: Cookies.CookieAttributes = {
    path: "/",
    sameSite: "strict",
    secure: process.env.NODE_ENV === "production", // 生产环境使用 HTTPS
  };

  if (expiresIn) {
    options.expires = new Date(Date.now() + expiresIn * 1000);
  }

  Cookies.set(key, value, options);
};
